#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>

#include <QtCore/QPair>

#include "../Application/global.h"
#include "dialognouvellepartie.h"
#include "plateau.h"
#include "dialogabout.h"

class Joueur;
class DialogAbout;

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void afficherNouvellePartie(QString pNomJoueur1, Types::TypesJoueurs pTypeJoueur1, QString pNomJoueur2, Types::TypesJoueurs pTypeJoueur2);

    inline bool isTopClickable() {return m_isTopClickable;}
	inline bool isBottomClickable() {return m_isBottomClickable;}

	inline int joueurActuel() {return (m_joueurActuel == m_joueur1.first ? 1 : 2);}

private:
    Ui::MainWindow *ui;

    GPlateau *m_plateau;                       // Scene graphique
    DialogNouvellePartie *m_dialogNouvellePartie;
	DialogAbout *m_dialogAbout;

    Joueur* m_joueurActuel;
    bool m_isTopClickable;
    bool m_isBottomClickable;

    QPair<Joueur*,Types::TypesJoueurs> m_joueur1;
    QPair<Joueur*,Types::TypesJoueurs> m_joueur2;



signals:
    void signalQuitter();
    void nouvellePartie(QString, Types::TypesJoueurs, QString, Types::TypesJoueurs);
    void transmitRefreshCase(int pNumCase, int pNouveauNombre);
    void transmitTourJoue(int pNumCase, int pNumJoueur);

    void signalCaseChoisie(int pNumCase);

private slots:
	void on_actionA_propos_triggered();
	void on_actionNouvelle_partie_triggered();
    void nouveauTour(Joueur* pJoueur);
    void grainesPrises(int pNumJoueur, int pNbGraines);

public slots:
    void lancerNouvellePartie(Joueur* j1, Joueur* j2);
    void saisirCase();
    void grainesPrisesJoueur1(int pNbGraines);
    void grainesPrisesJoueur2(int pNbGraines);
    void caseChoisie(int pNumCase);
	void partieFinie(Joueur* pGagnant, Joueur* pPerdant);
};

#endif // MAINWINDOW_H
